package com.zzyl.mapper;

import com.zzyl.dto.ResourceDto;
import com.zzyl.entity.Resource;
import com.zzyl.vo.MenuVo;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface ResourceMapper {

    List<MenuVo> selectMenuByUserId(Long userId);

    /**
     * 资源列表
     */
    List<Resource> findList(String parentResourceNo, String resourceType, String dataState);

    /**
     * 根据父级资源编号和类型查询资源
     * @param parentResourceNo  父资源编号
     * @param resourceType  资源类型
     * @param dataState 资源状态
     * @return
     */
    List<Resource> findChildList(@Param("parentNo") String parentResourceNo, @Param("type") String resourceType, @Param("dataState") String dataState);

    /**
     * 查询父菜单详情(根据资源编号查询资源详情)
     */
    @Select("select * from sys_resource where resource_no=#{parentResourceNo}")
    Resource findByResourceNo(String parentResourceNo);
    /**
     * 根据当前资源编号 , 查询当前资源的子资源列表
     */
    @Select("select * from sys_resource where parent_resource_no=#{resourceNo}")
    List<Resource> findChildList2(String resourceNo);
    /**
     * 新增资源
     */
    @Insert("insert into sys_resource values (null,#{resourceNo},#{parentResourceNo},#{resourceName},#{resourceType}" +
            ",#{requestPath},#{label},#{dataState},#{sortNo},#{icon},#{createTime},#{updateTime},#{remark},#{createBy}" +
            ",#{updateBy})")
    void insert(Resource resource);

    /**
     * 根据资源编号修改资源状态
     */
    void updateByResourceNo(@Param("resourceNo") String resourceNo,@Param("dataState") String dataState);
    /**
     * 根据父资源编号修改资源状态
     */
    void updateByParentResourceNo(@Param("parentResourceNo") String parentResourceNo,@Param("dataState") String dataState);

    /**
     * 查询当前资源的子资源列表
     */
    @Select("select * from sys_resource where parent_resource_no like concat(#{resourceNo},'%')")
    List<Resource> findChildList3(String parentResourceNo);
    /**
     * 删除菜单
     */
    void deleteResource(@Param("menuId") String menuId);

    /**
     * 编辑资源
     * 如果上级菜单没有被修改
     * 就只修改 菜单名称、菜单路由、排序
     */
    void modefyByResource(Resource resource);

    /**
     *  修改资源
     */
    void update(Resource resource);

}